import { http } from './request'

/**
 * 统一的用户信息获取工具
 */
export const userUtils = {
  /**
   * 获取当前登录用户信息
   * @returns {Promise<Object|null>} 用户信息对象或null
   */
  async getCurrentUser() {
    try {
      const userid = localStorage.getItem('userid')
      if (!userid) {
        console.warn('用户未登录，无法获取用户信息')
        return null
      }

      // 先尝试从本地缓存获取
      const cachedUserInfo = localStorage.getItem('userInfo')
      if (cachedUserInfo) {
        try {
          const userInfo = JSON.parse(cachedUserInfo)
          if (userInfo.real_name && userInfo.id == userid) {
            return userInfo
          }
        } catch (e) {
          console.warn('解析缓存用户信息失败:', e)
        }
      }

      // 从API获取用户信息
      const response = await http.get(`/login/users/${userid}/`)
      if (response.data && response.data.id) {
        // 缓存用户信息
        localStorage.setItem('userInfo', JSON.stringify(response.data))
        return response.data
      } else {
        console.error('获取用户信息失败: API返回数据格式错误')
        return null
      }
    } catch (error) {
      console.error('获取当前用户信息失败:', error)
      return null
    }
  },

  /**
   * 获取当前用户ID
   * @returns {string|null} 用户ID或null
   */
  getCurrentUserId() {
    return localStorage.getItem('userid')
  },

  /**
   * 获取当前用户姓名
   * @returns {Promise<string>} 用户姓名，失败时返回默认值
   */
  async getCurrentUserName() {
    try {
      const user = await this.getCurrentUser()
      return user ? user.real_name : '未登录'
    } catch (error) {
      console.error('获取用户姓名失败:', error)
      return '未登录'
    }
  },

  /**
   * 清除用户信息缓存
   */
  clearUserCache() {
    localStorage.removeItem('userInfo')
  },

  /**
   * 检查用户是否已登录
   * @returns {boolean} 是否已登录
   */
  isLoggedIn() {
    const token = localStorage.getItem('token')
    const userid = localStorage.getItem('userid')
    return !!(token && userid)
  },

  /**
   * 退出登录
   */
  logout() {
    localStorage.removeItem('token')
    localStorage.removeItem('userid')
    localStorage.removeItem('userInfo')
  }
}
